Write a function that traverses an object and returns all the strings which are numbers as Numbers. It should also traverse all the nested objects.

{
  a: "1",
  b "foo",
  nested: {
    c: "3.0"
    d: 3.14159,
    grandchild: {
      name: "bar"
      age: "5"
    },
    bonus: [1, "1", "2.7"]
  }
}

Expected result: 
{
  a: 1,
  b "foo",
  nested: {
    c: 3.0
    d: 3.14159,
    grandchild: {
      name: "bar"
      age: 5
    },
    bonus: [1, 1, 2.7]
  }
}